import moment from 'moment'
import { DATE_FORMAT } from './globalEnum'
moment.locale('zh-cn')
export default class DateUtils {
  static dateFormatStr = DATE_FORMAT
  /**
   * 时间格式化
   * @param {*} v 
   * @returns 
   */
  static dataFormat(v) {
    return moment(v).format(this.dateFormatStr);
  }
  /**
   *获取传入日期 今天0点和24点的数据列表
 * @param {*} date 
 * @returns  [ '2024-03-11 00:00:00', '2024-03-11 23:59:59' ]
   */
  static getStartAndEndDayList(date) {
    const t = date ? moment(date) : moment()
    return [t.startOf('day').format(this.dateFormatStr), t.endOf('day').format(this.dateFormatStr)]

  }

  /**
   * 获取传入日期本月第一天和最后一天的数据列表
   * @param {*} date 非必传
   * @returns [ '2024-03-01 00:00:00', '2024-03-31 23:59:59' ]
   */
  static getStartAndEndMonthList(date) {
    const t = date ? moment(date) : moment()
    return [t.startOf('month').format(this.dateFormatStr), t.endOf('month').format(this.dateFormatStr)]
  }

  /**
  * 获取传入日期本季度第一天和最后一天的数据列表
  * @param {*} date 非必传
  * @returns [ '2024-03-01 00:00:00', '2024-03-31 23:59:59' ]
  */
  static getStartAndEndQuarterList(date) {
    const t = date ? moment(date) : moment()
    return [t.startOf('quarter').format(this.dateFormatStr), t.endOf('quarter').format(this.dateFormatStr)]
  }

  /**
 * 获取近1个月时间范围列表
 * @param {*} date 非必传
 * @returns 
 */
  static getNearOneMonthList(date) {
    const t = date ? moment(date) : moment()
    return [t.subtract(1, 'month').format(this.dateFormatStr), moment().format(this.dateFormatStr)]
  }
  /**
 * 获取传入日期的前7天和后7天的数据列表
 * @param {*} date  非必传
 * @returns 
 */
  static getPrev7AndTodayAndNext7List(date) {
    const t = date ? moment(date) : moment()
    //subtract方法时间来改变原始 moment。所以搞出来2个moment对象
    return [t.subtract(7, 'days').format(this.dateFormatStr), t.add(7, 'day').format(this.dateFormatStr), t.add(7, 'day').format(this.dateFormatStr)]
  }
  /**
 * 从此刻到过去的时间  
 * @param {*} date 必传
 * @returns  获取几年前、几月前、几分前。。。
 */
  static getFromNowString(date) {
    if (!date) return ''
    return moment(date).fromNow()
  }
  
  /**
   * 处理2个时间差，返回还有x年x月x日x小x分钟到期
   * @param {*} date 
   * @param {*} fn 
   * @returns 
   */
  static diff(date, fn) {
    if (!date) return ''
    const t = moment.duration(moment(date).diff(moment()))
    const obj = {
      year: t.years(),
      month: t.months(),
      day: t.days(),
      hour: t.hours(),
      minute: t.minutes(),
      second: t.seconds()
    }
    if(!fn) return `${obj.year}年${obj.month}月${obj.day}日${obj.hour}小时${obj.minute}分`
    return fn(obj)
  }
}
